A block addressable storage device is typically comprised of one or more disks, such as flexible disks, rigid disks, or optical discs, and stores data in addressable groups referred to as blocks. The number of bytes of data contained in a single block is called the block length or block size. While the block length can be any number of bytes, storage device manufacturers often preformat the storage devices into blocks with a block length of 512 bytes. Application programs that read and write data to the storage devices need assurance that data integrity is maintained as data is transferred between the storage device and application program.
Prior art storage devices include techniques for providing some assurances of data integrity. For instance, hard disk drive controllers often utilize an error correcting code (ECC) algorithm to detect and possibly correct hardware related failures within the hard drive. In addition to hardware errors, data integrity may be compromised by transport errors that occur during data transmission via Small Computer System Interface (SCSI) cables, storage adapter cards and storage device drivers. Failure to detect the transport errors or disk errors allows corrupt data to propagate. Undetected transport errors that occur within data are referred to as “silent data corruption.” Silent data corruption occurs when the application program retrieves data from the storage system (i.e. a disk read request) that is stale, altered or lost without being detected or corrected. Stale data is data that was written at an earlier time and is incorrectly returned in place of the more recent (lost) data. Altered data is data that is present but corrupted or changed and no longer correctly represents the original data. Finally, lost data is data that is lost and no longer available. The presence of such errors is of substantial concern for critical applications where the impact of undetected errors can be catastrophic.
In view of the prevalence of silent data corruption, there is a need in the art to provide improved techniques to detect data corruption in storage systems. Moreover, there is a need for improved systems which can provide data corruption detection over a greater portion of the I/O path, instead of merely providing ECC protection within the hard disk drive alone.